Open Type Synonym Family
toplevelで宣言する
型の型と実装を別の場所に書く
あとから、外部から追加できる
つまりopen
kindを推論できない
code:hs
type family If (c :: Bool) t f
type instance If 'True t f = t
type instance If 'False t f = f
kind注釈は書いても書かなくても良い
code:hs
type family Add m n
code:hs
type family Add m n :: Nat -> Nat -> Nat